#ifndef FILTER_HEADER_FROM_AI_INCLUDED
#define FILTER_HEADER_FROM_AI_INCLUDED
////////////////////////////////////////////////////////////////////////////////
//	Copyright (c) 2004 by Michael 'Astar' Sotnikov
//	stari4ek at gmail dot com
////////////////////////////////////////////////////////////////////////////////
#include <string>
#include <vector>

#include <boost/archive/xml_oarchive.hpp>
#include <boost/archive/xml_iarchive.hpp>

#include <boost/serialization/nvp.hpp>
#include <boost/serialization/string.hpp>
#include <boost/serialization/vector.hpp>

#include "core/cModules.hpp"

#include "aiBrainConstants.hpp"

namespace ai{
	
typedef std::string FilterId_t;

struct FilterInfo_s{
	std::string								m_name;
	std::string								m_desc;

	typedef std::vector<BrainConstantId_t>	BrainConstantsPrereqList_t;	
	BrainConstantsPrereqList_t				m_prereq_constants;
	
	std::string								m_script_bind;
	
	template< class Archive >
    void serialize( Archive & ar, const unsigned int ){
    	ar & boost::serialization::make_nvp( "name",			m_name );
    	ar & boost::serialization::make_nvp( "description", 	m_desc );
    	ar & boost::serialization::make_nvp( "constants", 		m_prereq_constants );
    	ar & boost::serialization::make_nvp( "bind", 			m_script_bind );
    }
};

class FiltersModule_c: public Module_c{
	CORE_MODULE_DECLARE(FiltersModule_c);

protected:
	bool			ModuleInit();
	bool			ModuleDone();
};

CORE_MODULE_REGISTER(FiltersModule_c);

}; // ai{


#endif /*FILTER_HEADER_FROM_AI_INCLUDED*/
